Proyecto: El Desafío de Don Rene

MDS7202: Laboratorio de Programación Científica para Ciencia de Datos

Cuerpo Docente:

Por favor, lean detalladamente las instrucciones de la tarea antes de empezar a escribir.


Reglas


El desafio de Don Rene

Don Rene, afamado influencer y próximo emprendedor de IA, decide que será una buena idea darle un giro a su vida y dedicarse al rubro del asesoramiento de inversionistas en la industria de los videojuegos.

El futuro empresario plantea que el éxito relativo de una inversión en una desarrolladora de juegos debe ser analizado desde un punto de vista basado en evidencia y no en la intuición. Por dicha razón, plantea que para el sería ideal que existiera una máquina que, dada las características de un nuevo videojuego (su género, el estudio que lo desarrolla, su historia, etc...), indique si este será potencialmente una inversión rentable o no.

Rene está convencido que el éxito de una inversión en videojuegos estar relacionada por dos características muy relevantes de estos una vez que salen al mercado:

1. La potencial evaluación (Positivo, Negativo, etc...) que le den los usuarios que jugarán el juego.

2. Las potenciales ventas del juego.

Si bien la idea puede sonar excelente, Don Rene carece en su totalidad de una formación en Ciencia de los Datos, por lo que decide ir en ayuda de expertos para implementar su idea.

Sin embargo, como fiel discipulo del libre mercado, decide no contratar a un equipo en particular, si no que tener la libertad de elegir entre muchos equipos que compiten entre si para saber cuál contratar. Para esto recurre a una triquiñuela recurrentemente utilizada en data science: Establecer una competencia abierta y contratar a los que cumplan mejor sus requisitos.

Para esto, Don Rene abre una competencia en la plataforma Codalab (plataforma similar a Kaggle) la cuál, espera que se replete de buenas propuestas. Los equipos que mejor evaluaciones obtengan (los primeros 5 de cada tabla) serán contratados y retribuidos con un cupón canjeable con la friolera cantidad de 1 punto bonus para el proyecto en el curso MDS7202.

Definición Formal del Problema

El objetivo de este proyecto es relativamente sencillo, pero en extremo ambicioso: Tendrán que aplicar todo lo aprendido hasta este momento con el fin de solucionar 2 problemas distintos:

  1. Clasificación de potenciales evaluaciones con las que los jugadores evaluarán los juegos. Las posibles clases que deben asignar a cada juego son ('Negative', 'Mixed', 'Mostly Positive', 'Positive', 'Very Positive'). La métrica de evaluación utilizada para medir la clasificación es f1_weighted.
  2. Regresión de las potenciales ventas que tendrán los juegos. La métrica de evaluación utilizada para medir la clasificación es r_2.

Para esto, ustedes contarán un dataset que cuenta con diversa información de los juegos de la plataforma Steam (tales como fecha de lanzamiento, logros disponibles, plataforma, desarrollador, distribuidor, tags, etc...) más las etiquetas y valores a predecir.

El objetivo final es que participen en la competencia generada en Codalab. Una competencia de Data Science funciona generalmente de la siguiente manera:

  1. Se plantea un problema que los equipos deben resolver.
  2. Se provee de datos de entrenamiento a los equipos para que generen modelos que resuelvan el problema.
  3. Se provee de datos de prueba que los equipos deberán predecir con los modelos creados. Una vez predichos, los equipos deben subir los archivos a la plataforma, la cuál los evaluará y publicará en un tablero disponible para todos los participantes.

Por este motivo, se les provee de dos datasets: train.pickle y test.pickle.

Obviamente para subir archivos a la competencia deberán registrarse en Codalab. Puden participar máximo 5 veces en la competencia (la idea es evitar que se sobreajusten a los datos que deben predecir)

IMPORTANTE: Para la clasificación no usen la cantidad de ventas (target de la regresión) como atributo. Por otro lado, para la regresión no utilicen las evaluaciones como atributo para predecir. Infringir estas reglas implicará en no contar el puntaje de la competencia como tampoco poder participar de los bonus por los tops.

Proyecto

Equipo:

1. Introducción

El objetivo de este proyecto consiste en aplicar la materia del curso en un desafío de regresión y clasificación.

Los datos que proveen es un dataset con 17881 juegos y sus atributos respectivos, como por ejemplo, los generos y las categorías. Son 16 atributos y la variables objetivos son de tipo categórica y numérica, en este caso, la reseña y el valor del juego.

La primera tarea, la de regresión, se evalua en base al accuracy y la varianza explicada, ya que esta permite medir, que tan exacta es la predicción. La segunda, se evalúa, en función de las métricas f-1 score, precission y recall.

Nuestra propuesta para resolver el problema utilizó una transformación de las columnas, escalándolas y generando n-gramas utilizados para el entrenamiento.

Nuestro modelo cumplió las expectativas para la regresión, pero fracasó rotundamente para la clasificación. Existen diversos motivos para este comportamiento como, por ejemplo, el uso de muchas variables.


2. Análisis Exploratorio de Datos

A continuación observamos los juegos que tienen la misma descripición entre sí. Para observar si es que corresponde al mismo juego y a una diferente versión. La idea es quitar datos duplicados.

Debido a que son una cantidad no tan grande de datos y que no son juegos muestras duplicadas del mismo juego, si no versiones distintas del mismo juego.

A continuación se observa en detalle el comportamiento de las siguientes vairables de interés:

Notemos que existe una distribución balanceada entre cada categoría. Si bien no existe una cantidad pareja, la diferencias se mantienen en magnitudes razonables.

La gran mayoría de los juegos no tiene restricción de edad. Esto nos dice, en cierta medida, que no tiene tanta importancia en la predicción.

La distribución de los precios se acumula en valores inferiores a los 20 dolares. Es probable que la gran mayoría de juegos indies se concentren aquí, mientras que los juegos de grandes compañías tengan valores mucho mayores.

A continuación, comenzamos a crear los primeros n-gramas que nos ayudarán en la predicción y a evaluar la composición del dataset.

A continuación se observan los trigramas y bigramas más frecuentes del bag of words creado para el dataset.

Un aspecto relevante es que la descripción del juego se condice mucho con los valores de las categorías. Esto nos podría generar correlaciones no deseadas más adelante.

A continuación se observa la correlación entre las variables de entrada y la variable por predecir:

Para esto extraemos las variables objetivo en un inicio:

Notemos que, salvo x0_negative con price y x0_VeryPositive con estimated sells, las magnitudes de correlación son bajas.

A continuación, buscamos reducir la dimensionalidad del dataset debido a los resultados anteriores.

Al efectuar el análisis exploratorio de datos con Pandas Profiling pudimos notar lo siguiente:


3. Preparación de Datos

Para preparar nuestros datos, primero como se comento en la parte anterior se ve que no hay elementos duplicados en la tabla en general, pero si en columnas como 'short_description' dado que por el nombre de los juegos, se encuentran con nombre parecidos pero diferentes versiones, se procede a dejar todos los datos. A continuación se trabajan los outliers del dataset. El criterio que se usar, para las variables numéricas, es aplicar z-score y ver que los valores esten dentro de un 95% de confianza. Partimos analizando la variable precio.

En total hay 105 outliers en la variables precio.

y también existen 41 en la variable _averageplaytime

Después, como no existen dados faltantes no se procede a hacer imputación de datos y se procede a aplicar ColumnTransformer para prepara los datos:

Para la clasificación se aplicó Standard scaler con sus valores por defecto y bigramas dentro del bag o words.

...


4. Baseline

Adjuntamos las transformaciones anteriores en un solo Pipeline y agregamos al final un clasificador sencillo ClasificadorX

Los resultados son, en general, malos, ya que no se alcanza a tener una exactitud superior al 0.5. Sin embargo, teniendo en cuenta la cantidad de categorías otorga resultados satisfactorios.

Nuestro modelo solo explica un 20% de la varianza. Consideramos como grupo que es un valor decente para la complejidad del problema.


5. Optimización del Modelo

Ahora, agregamos selección y/o reducción de atributos y probaremos una combinación de diferentes parámetros para mejorar nuestro modelo:

Nota: Procuren hacer Gridsearch sobre espacios de búsqueda razonables. Es decir, no estén 3 días buscando la mejor configuración...

parametros para la clasificación

Se prueban una serie de parámetros. En este caso, dos clasificadores distintos: SVM y Regresión Logística, dentro de un espacio de hasta trigramas.

El mejor modelo resulta ser SVC usando un bag of words simple.

A pesar de que los resultados mejoran, no logran obtener una valor suficientemente bueno.

parametros para la regresión

Se utilizan los regresores Ridge y SVM. En esta parte no se usan n-gramas.

Pudimos ver que mejor modelo mejora los resultados obtenidos en el baseline para la clasificación, pero la mejora es insignificante para la regresión.


6. Conclusiones

En general se cumplió el objetivo del proyecto ya que se aplicaron los aprendizajes del curso. Sin embargo, los resultados finales no son tan buenos en consideración al baseline. De todos modos, vemos como un aprendizaje lo obtenido ya que logramos aplicar técnicas de optimización de modelos respecto al baseline.

Consideramos que usar una competencia para resolver este problema sirvió de motivación para obtener mejores resultados más allá de solo aplicar el modelo, aún teniendo en cuenta que nuestros resultados no fueron los mejores y se tiene una limitación para subir resultados, con lo cual se tiene que pensar y enfocar los esfuerzos cada vez que se intenta mejorar el modelo.

Tambien se considera que falto un estudio mas profundo sobre cada estimador para decidir exactamente que parametros se deberian probar, dado que no todos significa una alza en el rendimiento.



Anexo: Generación de Archivo Submit de la Competencia

Para subir los resultados obtenidos a la pagina de CodaLab utilice la función generateFiles entregada mas abajo. Esto es debido a que usted deberá generar archivos que respeten extrictamente el formato de CodaLab, de lo contario los resultados no se veran reflejados en la pagina de la competencia.

Para los resultados obtenidos en su modelo de clasificación y regresión, estos serán guardados en un archivo zip que contenga los archivos predicctions_clf.txt para la clasificación y predicctions_rgr.clf para la regresión. Los resultados, como se comento antes, deberan ser obtenidos en base al dataset test.pickle y en cada una de las lineas deberan presentar las predicciones realizadas.

Ejemplos de archivos:

Created in deepnote.com Created in Deepnote